#include "SerialJSON.h"
#include <string.h>
#include <stdio.h>
SerialJSON_HandleTypeDef serialJSON;

void SerialJSON_Init(SerialJSON_HandleTypeDef *h, Serial_SendFunc send, Serial_JSONCallback cb)
{
    if (!h)
        return;
    h->send_func = send;
    h->callback = cb;
    h->rx_index = 0;
    memset(h->rx_buffer, 0, sizeof(h->rx_buffer));
}

bool SerialJSON_Send(SerialJSON_HandleTypeDef *h, cJSON *obj)
{
    if (!h || !obj || !h->send_func)
        return false;

    char *str = cJSON_PrintUnformatted(obj);
    if (!str)
        return false;

    // 可以加起始符和结束符，例如以 \n 为结束符
    uint16_t len = strlen(str);
    h->send_func(str, len);
    h->send_func("\n", 1); // 换行作为结束符
    cJSON_free(str);
    return true;
}

// 简单按 '\n' 判断一条完整 JSON
void SerialJSON_ReceiveByte(SerialJSON_HandleTypeDef *h, uint8_t byte)
{
    if (!h)
        return;

    if (h->rx_index >= sizeof(h->rx_buffer) - 1)
    {
        // 超长，清空缓存
        h->rx_index = 0;
        memset(h->rx_buffer, 0, sizeof(h->rx_buffer));
        return;
    }

    h->rx_buffer[h->rx_index++] = byte;

    if (byte == '\n')
    {
        h->rx_buffer[h->rx_index] = 0; // 字符串结束符
        cJSON *json = cJSON_Parse(h->rx_buffer);
        if (json && h->callback)
        {
            h->callback(json);
        }
        if (json)
            cJSON_Delete(json);

        // 重置缓存
        h->rx_index = 0;
        memset(h->rx_buffer, 0, sizeof(h->rx_buffer));
    }
}
